Most modern computing systems include several processing cores. However, optimizing software for a multi-core system is a difficult task. Without the proper assignment of software tasks to processor cores, the software may not execute on multiple cores in an efficient manner. The severity of this problem further increases as the number of processing cores increases.